#ifndef CPP_TEXTVIEW_H
#define CPP_TEXTVIEW_H

#include <widget/View.h>

class Font;
class Rect;
class Bitmap;

//@brief 文本
//@author Jason
//@description 文本控件
class TextView : public View {
   public:
    TextView();

    virtual ~TextView();

    //@method 设置文本区域
    //@param rect 矩形对象
    void setTextRect(Rect& rect);

    //@method 设置文本字体
    //@param font 字体对象
    void setTextFont(Font& font);

    //@method 设置文本对齐风格
    //@param alignStyle 文本对齐风格
    void setTextAlignment(TextAlignStyle alignStyle);

    //@method 设置文本内容
    //@param text 文本内容字符串
    void setText(const char* text);

    //@method 设置文本内容
    //@param text 文本内容字符串 lineSpacingExtra行间距
    void setText(const char* text, int lineSpacingExtra);

    //@method 获取文本内容
    //@return text 文本内容字符串
    const char* getText();

    //@method 设置文本颜色
    //@param color 颜色
    void setTextColor(int color);

    //@method 设置高亮文本内容
    //@param text 高亮文本内容字符串
    void setHighlightText(const char* text);

    //@method 获取高亮文本内容
    //@return text 高亮文本内容字符串
    const char* getHighlightText();

    //@method 设置高亮文本颜色
    //@param color 颜色
    void setHighlightTextColor(int color);

    //@method 设置高亮背景颜色
    //@param color 颜色
    void setHighlightBackgroundColor(int color);

    //@method 获取高亮背景颜色
    //@return color 高亮背景颜色
    int getHighlightBackgroundColor();

    void setHighlightBackgroundBitmap(Bitmap& bitmap, int x, int y);

    //@method 设置触摸时的背景颜色
    void setTouchingBackgroundColor(int color);
    //@method 获取触摸时的背景颜色
    int getTouchingBackgroundColor();
    //@method 设置触摸时的背景图
    void setTouchingBackgroundBitmap(Bitmap& bitmap, int x, int y);

    //@method 设置文本选中状态
    //@param seclected 是否选中
    void setSelected(bool selected);

    //@method 获取文本选中状态
    //@return 是否选中
    bool getSelected();

    //@method 设置是否每次绘制时更新字符串内容
    void setUpdateTextEveryDraw(bool enable);

    //@method 设置行距
    void setLineSpacingExtra(int px);

    //@method 获取行距
    int getLineSpacingExtra();

   protected:
    void onAttachedToWindow();
    void onDetachedFromWindow();
    void onDraw(Canvas& canvas);
    void onSizeChanged(int w, int h, int oldW, int oldH);
    void onClicked();

    Font* mFont;
    Rect* mTextRect;
    TextAlignStyle mTextAlignStyle;
    std::string mText;
    int mTextColor;
    std::string mHighlightText;
    int mHighlightTextColor;
    int mHighlightBackgroundColor;
    bool mIsSelected = false;
    bool mIsCustomTextRect;
    const char* mTextStr = nullptr;
    const char* mHighlightTextStr = nullptr;
    bool mIsUpdateTextEveryDraw = false;  //是否每次绘制时更新字符串内容，即字符串内容不会保存到mText中

    Bitmap* mHighlightBackgroundBitmap = nullptr;
    int mHighlightBackgroundBitmapX = 0;
    int mHighlightBackgroundBitmapY = 0;

    bool mIsTouching = false;
    int mTouchingBackgroundColor = 0;
    Bitmap* mTouchingBackgroundBitmap = nullptr;
    int mTouchingBackgroundBitmapX = 0;
    int mTouchingBackgroundBitmapY = 0;

   private:
      int mLineSpacingExtra = 10;
};

#endif /* CPP_TEXTVIEW_H */